package day20180129.reflect;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;

/**
 * Created by 14394 on 2018/1/29.
 */
public class WebUtil {

    /*
    * 通过反射机制将request对象中保存的数据设置到java对象中。
    * request: 请求对象，该对象保存了用户从表单中提交的数据*/
    public static void makeRequestToObject(HttpServletRequest request, Object o){
        //获取类型
        Class c = o.getClass();

        //获取用户提交所有数据的name
        Enumeration<String> names= request.getParameterNames();

        while (names.hasMoreElements()){
            //这里的name就是用户提交数据“=”左边的值
            String name = names.nextElement();

            //拼接方法名

            String methodName = "set" + name.toUpperCase().charAt(0) + name.substring(1);

            //获取方法
            try {
                Method setMethod = c.getMethod(methodName,String.class);
                //执行set方法，进行赋值
                setMethod.invoke(o,request.getParameter(name));
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
}
